/*  Copyright (C) 2009 Jos van der Til
    
    This file is part of the Fluent Metadata Library.

    The Fluent Metadata Library is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    The Fluent Metadata Library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with the Fluent Metadata Library.  If not, see <http://www.gnu.org/licenses/>.
 */
using System;
using System.Collections.Generic;
using System.Linq;
using FluentMetadata.AttributeBuilders.Validation.DataTyping;

namespace FluentMetadata.AttributeBuilders.Validation
{
    public class ValidationAttributeBuilder : AbstractAttributeBuilder, IValidationAttributeBuilder
    {
        #region IValidationAttributeBuilder Members

        public IDataTypeAttributeContainer DataType
        {
            get
            {
                var attributeBuilder = new DataTypeAttributeContainer();
                AddAttributeContainer(attributeBuilder);

                return attributeBuilder;
            }
        }

        public IStringLengthAttributeBuilder StringLength()
        {
            var stringLengthBuilder = new StringLengthAttributeBuilder();
            AddAttributeContainer(stringLengthBuilder);

            return stringLengthBuilder;
        }

        public IRangeAttributeBuilder Range()
        {
            var rangeBuilder = new RangeAttributeBuilder();

            AddAttributeContainer(rangeBuilder);

            return rangeBuilder;
        }

        public IValidationAttributeBuilder IsRequired()
        {
            var reqAttrBuilder = new RequiredAttributeBuilder();

            AddAttributeContainer(reqAttrBuilder);

            return this;
        }

        public IValidationAttributeBuilder IsKey()
        {
            var keyAttrBuilder = new KeyAttributeBuilder();

            AddAttributeContainer(keyAttrBuilder);

            return this;
        }

        public IRegExAttributeBuilder ByRegularExpression(string pattern)
        {
            var regExBuilder = new RegExAttributeBuilder(pattern);

            AddAttributeContainer(regExBuilder);

            return regExBuilder;
        }

        #endregion
    }
}